/**
 * 设置系统变量的脚本 
 */

var TAGNAME_INPUT='INPUT';
var TAGNAME_SELECT='SELECT';
var INPUT_TYPE_RADIO = 'radio';
var INPUT_TYPE_CHECKBOX = 'checkbox';

var LORD_ID = 'lordId';//如果表单元素有此属性，则要看此属性指定的ID的表单元素是否有被选择

var MARK_ATTR_NAME='col';//保存所有系统变量的表单的特有属性

var sysVarFormElems = [];//保存所有系统变量的表单元素的数组

//初始化保存所有系统变量的表单元素的数组
function getAllSysVarsFormElem(){
	
	var tagNameArr = [TAGNAME_INPUT,TAGNAME_SELECT];
	
	
	for(var j=0;j<tagNameArr.length;j++){
		var allFormElems = document.getElementsByTagName(tagNameArr[j]);
		for(var i=0;i<allFormElems.length;i++){
			var oneFormElem = allFormElems[i];
			if(oneFormElem.getAttribute(MARK_ATTR_NAME)){
				sysVarFormElems.push(oneFormElem);
			}
		}
	}
	
	return sysVarFormElems;
}

//取得全局变量sysVarFormElems中的所有表单元素的值，保存进一个JS对象中并返回
function sysVarFormElemValuesToObj(){
	
	var sysVarObj = {};
	
	
	for(var i = 0;i<sysVarFormElems.length;i++){
		var oneFormElem = sysVarFormElems[i];
		var name = oneFormElem.name;//对应数据库sys_var表的sys_code字段
		var col = oneFormElem[MARK_ATTR_NAME];//对应数据库sys_var表中的字段
		
		var oneRowInfo = sysVarObj[name];//保存sys_var表一行记录的对象
		if(!oneRowInfo){//如果没，则创建一个新的对象并保存
			oneRowInfo = {};
			sysVarObj[name] = oneRowInfo;
		}
		
		var oneFormInfo = getFormElemValueByElemType(oneFormElem);
		if(!oneFormInfo){//如果此表单元素的值被忽略
			continue;
		}else{
			oneRowInfo[oneFormInfo[MARK_ATTR_NAME]]=oneFormInfo['value'];
		}
	}
	
	return sysVarObj;
}

/**
 * 根据参数传入的表单元素及其类型返回其值
 * 如果本表单元素的值可以被忽略，则返回undefined，
 * 否则返回形如{MARK_ATTR_NAME:'字段名',value:'字段值'}的对象
 */
function getFormElemValueByElemType(formElem){
	var tagName = formElem.tagName;
	var lordId = formElem.getAttribute(LORD_ID);//控制本表单元素有没效的radio或checkBox的ID
	var colName = formElem.getAttribute(MARK_ATTR_NAME);//对应数据库的字段名
	var value;//表单元素的值
	
	//如果表单元素有此属性，则要看此属性指定的ID的表单元素是否有被选择
	if(lordId){
		var lordElem = document.getElementById(lordId);
		var lordChecked = lordElem.checked;
		if(!lordChecked){//如果关联的radio都没被选择，则忽略本表单元素的值
			return undefined;
		}
	}
	
	//根据不同的标签，取得其值
	if(tagName==TAGNAME_INPUT){
		var type = formElem.type;
		
		//对于radioButton，因为总有一个被选中的，所以没被选中的将被忽略
		if(type&&type==INPUT_TYPE_RADIO){
			var checked = formElem.checked;
			if(checked){//如果有被选中
				value = formElem.value;
			}else{
				return undefined;
			}
			
		//对于多选按钮，只有选中或没选中两种情况
		}else if(type&&type==INPUT_TYPE_CHECKBOX){
			var checked = formElem.checked;
			if(checked){//如果有被选中
				value = '1';
			}else{
				value = '0';
			}
			
		//对于文本框，则返回其值
		}else{
			value = formElem.value;
		}
		
	}else if(tagName==TAGNAME_SELECT){
		value = formElem.value;
	}
	
	return {'col':colName,'value':value};
}

/**
 * 根据传入的系统变量的值，初始化全局变量数组sysVarFormElems中的表单元素
 */

function initFormElemByObj(sysVarObj){
	
	for(var i=0;i<sysVarFormElems.length;i++){
		
		var formElem = sysVarFormElems[i];//一个表单元素
		
		var elemName = formElem.name;
		var tagName = formElem.tagName;
		var lordId = formElem.getAttribute(LORD_ID);//控制本表单元素有没效的radio或checkBox的ID
		var colName = formElem.getAttribute(MARK_ATTR_NAME);//对应数据库的字段名
		
		var oneRowInfo = sysVarObj[elemName];//本表单元素对应数据库sys_var表的行信息
		if(!oneRowInfo)
			continue;
		
		var value = oneRowInfo[colName]== 'null'?'':oneRowInfo[colName];
		
		//如果表单元素有此属性，则要看此属性指定的ID的表单元素是否有被选择
		if(lordId){
			var lordElem = document.getElementById(lordId);
			var lordName = lordElem.name;
			var lordColName = lordElem.getAttribute(MARK_ATTR_NAME);//对应数据库的字段名;
			if(sysVarObj[lordName][lordColName]!=lordElem.value){
				continue;//如果关联的radio都没被选择，则不设置本表单元素的值
			}
		}
		
		//根据不同的标签，取得其值
		if(tagName==TAGNAME_INPUT){
			var type = formElem.type;
			
			//对于radioButton，因为总有一个被选中的，所以没被选中的将被忽略
			if(type&&type==INPUT_TYPE_RADIO){
				if(formElem.value == value){//如果有被选中
					formElem.checked = true;
				}else{
					formElem.checked = false;
				}
				
			//对于多选按钮，只有选中或没选中两种情况
			}else if(type&&type==INPUT_TYPE_CHECKBOX){
				if('1' == value){//如果有被选中
					formElem.checked = true;
				}else{
					formElem.checked = false;
				}
				
			//对于文本框，则直接设置其值
			}else{
				formElem.value = value;
			}
			
		}else if(tagName==TAGNAME_SELECT){
			formElem.value = value;
		}
	
	}
}
